マルチパート部分除去スクリプト

動作内容:

・電信八号を使用して返信操作を行うと、マルチパート部分まで引用して
 しまうため、*先頭の*プレーンテキスト以外を除去して引用するように
 する
 ※ 浅野さんが作成されたJheaderにもプレーンテキスト抽出機能が搭載
   されました(Ver1.50〜)。こちらでは複数のプレーンテキストも抽出
   してくれます。
・引用の引用(の引用(...))‘> >’を‘>>’に変換する
・空白行から引用符を除去する
・メイル本文が、‘confirm’で始まる場合、引用符を付けずにその行のみ
 を引用するようにする(fmlサブスクライブ用)←めちゃくちゃ横着者!!

動作確認環境:

 電信八号(V321.2b5以降で確認しています)
 Jdate(Ver.3.02以降で確認しています)
 Perlが動作する環境

使用方法:

 1.下のスクリプトをコピーし、適当な名前で保存する
    例:reply.pl
 2.返信用テンプレートにスクリプト呼び出しを記述する
    例:(パスは必要に応じてご変更ください)
    |%%RET1-1
    |%DATA 1,perl %JDATE%reply.pl,%FILE
    |%DISABLE
    |$HEADERS
    |$BODY[1-1999] (※)
    |%ENABLE
    |%END

 (※) 当方の環境では、巨大なファイルが添付されていると%DATAに本文
   が渡されない現象が生じたので、『[1-1999]』を付加しました

判っている不具合および改善を要す箇所:

 きりがないので、あえて記しません(苦笑)

謝辞:

 最後になりましたが、電信八号を開発された石岡さんと電八倶楽部のみ
 なさん、Jdateを開発された浅野さんにこの場を借りてお礼申し上げます。
 いつも便利に使用させて頂き、ありがとうございます。こんな素晴らし
 いソフトをフリーで公開して下さっているなんて、本当に感激です。

付録:

 電信八号オフィシャルサイト http://denshin8.esprix.net/
 浅野さんのホームページ http://user.shikoku.ne.jp/~asanonao/


以上です。拙文をわざわざお読み頂き、ありがとうございました。

-- 
Osamu Ogawa / 小川 修
mailto:jikoman@ogawa.8k.com

# reply.pl 2000-06-07
open(INI,&dchange($ARGV[0]));
@lines=<INI>;
close(INI);
$bou="";
for(;;){
    $cur=shift(@lines);
    unless (@lines) {
        exit;
    }
    if ($cur eq "\n") {
        if ($bou eq "") {
            last;
        }
    }
    if (&small($cur)=~/^content-type: multipart/) {
        unless (&small($cur)=~/boundary=".*"/) {
            $cur=shift(@lines);
        }
        $ind1=index($cur,'"')+1;
        $ind2=index(substr($cur,$ind1),'"');
        $bou="--".substr($cur,$ind1,$ind2)."\n";
    }
    if (&small($cur)=~/^content-type: text\/plain/) {
        last;
    }
}
for(;;){
    if (&pscut($cur) eq "\n") {
        last;
    }
    $cur=shift(@lines);
}
for(;;){
    $cur=shift(@lines);
    if (&pscut($cur) ne "\n") {
        last;
    }
}
for(;;){
    if ($cur eq $bou) {
        last;
    }
    if (!$cur) {
        last;
    }
    if (&small($cur)=~/^confirm /) {
        push(@new,$cur);
        last;
    }
    push(@new,&pscut("> ".$cur));
    $cur=shift(@lines);
}
for(;;){
    $cur=pop(@new);
    if ($cur ne "\n") {
        last;
    }
}
open(OUT,"> ".&dchange($ARGV[1]));
print OUT @new;
print OUT $cur;
close(OUT);
exit;
sub dchange {
    local ($_)=@_;
    1 while s/\\/\//;
    $_;
}
sub pscut {
    local ($_)=@_;
    1 while s/> >/>>/;
    1 while s/ \n/\n/;
    1 while s/^>\n/\n/;
    $_;
}
sub small {
  local($_) = @_;
  $_ =~tr/A-Z/a-z/;
  $_;
}

まえにもどる